<?php namespace DH16\Libs;
/**
 * Created by PhpStorm.
 * User: jiyan
 * Date: 2017/4/28
 * Time: 10:25
 */
/**
 * 应用类
 */
class App{
    /**
     * 总方法
     */
    public static function run(){
        //1.初始化框架
        self::init();
        //2.找见为找见的类
        spl_autoload_register([__CLASS__,'auto']);
        //3.实例化控制器
        self::autoRun();
    }

    /**
     * 1.初始化框架
     *   1-1 设置参数
     *   1-2 载入配置项
     *   1-3 设置时区
     *   1-4 开启session
     */
    private static function init(){
      //1-1 设置参数
        //模块
        $m = isset($_GET['m'])?ucfirst($_GET['m']):'Home';
        define('MODULE', $m);
        //控制器
        $c = isset($_GET['c'])?ucfirst($_GET['c']):'Index';
        define('CONTROLLER', $c);
        //方法
        $a = isset($_GET['a'])?$_GET['a']:'index';
        define('ACTION', $a);

        //1-2 载入配置项,调用C函数，执行操作，C函数放在函数库中
        //载入系统配置文件
        $sysConfig = include './config.php';
        C($sysConfig);
        //载入用户配置项
        $userConfig = include './App/Config/config.php';
        C($userConfig);
      //1-3.设置时区
        date_default_timezone_set(C('TIMEZONE'));
      //1-4. 开启session
        session_id() || session_start();
    }

    /**
     * 2.找见为找见的类
     */
    private static function auto($cname){
//        p($cname);   //Home\Controller\IndexController
//        判断是否为控制器类或工具类
        if(substr($cname,-10)=='Controller'){
            //为控制器类
            $path = "./App/".str_replace('\\','/',$cname).'.php';
//            p($path);
        }else{
            //为工具类
//            p($cname);  DH16\Tools\Code
            $path = str_replace('\\','/',$cname).'.php';
        }
       include $path;
    }

    /**
     * 3.实例化控制器
     */
    private static function autoRun(){
        $m = MODULE;         //模块
        $c = CONTROLLER;    //控制器
        $a = ACTION;        //方法

//        实例化命名空间
        $path = "\\{$m}\\Controller\\{$c}Controller";
//        p($path);
        $obj = new $path;
        $obj->$a();
    }

}